home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / lang_c / cserial / options.c < prev    next >
C/C++ Source or Header  |  1990-04-04  |  5KB  |  173 lines

  1. /*
  2.  *                              OPTIONS.C
  3.  *
  4.  *                           Written for the
  5.  *
  6.  *                              Datalight
  7.  *                           Microsoft V 5.x
  8.  *                                TurboC
  9.  *                                  &
  10.  *                               Zortech
  11.  *
  12.  *                             C Compilers
  13.  *
  14.  *            Copyright (c) John Birchfield 1987, 1988, 1989
  15.  */
  16.  
  17. #include <stdio.h>
  18. #include "options.h"
  19.  
  20. #if (!defined (TRUE))
  21. #    define TRUE  (1)
  22. #    define FALSE (0)
  23. #endif
  24.  
  25. int     Port = 1;
  26.  
  27. char    Opt_Msg [159] = { 0 },
  28.         Baud_rate[] = "1200",
  29.         Parity[] = "N",
  30.         Data[] = "8",
  31.         Stop[] = "1",
  32.  
  33.         Cfg_Str[15] = { 0 };
  34.  
  35.  
  36. int  good_baud (char *);
  37. void usage (void);
  38.  
  39. void 
  40. set_options (int cnt, char **args)
  41. {
  42.     char   *ch;
  43.     int   c_flag = 0;
  44.     while (--cnt > 0)
  45.     {
  46.         ch = *++args;
  47.         if (*ch == '?')
  48.             usage ();
  49.         if (*ch == '-')
  50.             switch (toupper (*++ch))
  51.             {
  52.                 case 'C':
  53.                     switch (*++ch)
  54.                     {
  55.                         case '1':
  56.                             Port = 1;
  57.                             break;
  58.                         case '2':
  59.                             Port = 2;
  60.                             break;
  61.                         default:
  62.                             usage ();
  63.                             break;
  64.                     }
  65.                     break;
  66.                 case 'B':
  67.                     c_flag = TRUE;
  68.                     if (good_baud (++ch))
  69.                         strcpy (Baud_rate, ch);
  70.                     else
  71.                         usage ();
  72.                     break;
  73.                 case 'P':
  74.                     c_flag = TRUE;
  75.                     switch (toupper (*++ch))
  76.                     {
  77.                         case 'E':
  78.                             Parity[0] = 'E';
  79.                             break;
  80.                         case 'O':
  81.                             Parity[0] = 'O';
  82.                             break;
  83.                         case 'N':
  84.                             Parity[0] = 'N';
  85.                             break;
  86.                         default:
  87.                             usage ();
  88.                             break;
  89.                     }
  90.                     break;
  91.                 case 'S':
  92.                     c_flag = TRUE;
  93.                     switch (*++ch)
  94.                     {
  95.                         case '1':
  96.                             Stop[0] = '1';
  97.                             break;
  98.                         case '2':
  99.                             Stop[0] = '2';
  100.                             break;
  101.                         default:
  102.                             usage ();
  103.                             break;
  104.                     }
  105.                     break;
  106.                 case 'D':
  107.                     c_flag = TRUE;
  108.                     switch (*++ch)
  109.                     {
  110.                         case '7':
  111.                         case '8':
  112.                             Data[0] = *ch;
  113.                             break;
  114.                         default:
  115.                             usage ();
  116.                             break;
  117.                     }
  118.                     break;
  119.                 default:
  120.                     break;
  121.             }
  122.     }
  123.     if (c_flag)
  124.     {
  125.         sprintf (Opt_Msg, "%s %d %s%s%s %s%s %s%s %s%s\n",
  126.                           "Com Port", Port, "Initialized  %--%  ",
  127.                           "   Baud=", Baud_rate, "Parity=", Parity,
  128.                           "Data=", Data, "Stop=", Stop);
  129.         strcpy (Cfg_Str, Baud_rate);
  130.         strcat (Cfg_Str, " ");
  131.         strcat (Cfg_Str, Parity);
  132.         strcat (Cfg_Str, " ");
  133.         strcat (Cfg_Str, Stop);
  134.         strcat (Cfg_Str, " ");
  135.         strcat (Cfg_Str, Data);
  136.     }
  137. }
  138.  
  139.  
  140.  
  141.  
  142.  
  143. static char *baud_rates[] =
  144. {
  145.  "300", "600", "1200", "2400", "4800", "9600", "19200", 0
  146. };
  147.  
  148. int 
  149. good_baud (char *s)
  150. {
  151.     int     i;
  152.     for (i = 0; baud_rates [i]; i++)
  153.         if (strcmp (baud_rates[i], s) == 0)
  154.             return (TRUE);
  155.     return (0);
  156. }
  157.  
  158.  
  159.  
  160. void
  161. usage (void)
  162. {
  163.     fputs ("Use the following command line options.\n\n", stderr);
  164.     fputs ("   -C[1 or 2] Com Port 1 or 2      {Default Com Port 1}\n", stderr);
  165.     fputs ("   -B[300 600 1200 2400 4800 9600] {Default 9600 Baud}\n", stderr);
  166.     fputs ("   -D[7 or 8]  Data Bits           {Default 8}\n", stderr);
  167.     fputs ("   -S[1 or 2] Stop Bits            {Default 1}\n", stderr);
  168.     fputs ("   -P[E O or N] Parity             {Default None}\n\n", stderr);
  169.     fputs ("   -b2400 -pn -s1 -d8 -c1\n\n", stderr);
  170.     exit (1);
  171. }
  172.  
  173.